/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.servicios;

import ec.edu.espe.ccsoft.mantenimiento.dao.AccesoFacade;
import ec.edu.espe.ccsoft.mantenimiento.modelos.Acceso;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

/**
 *
 * @author misahaelfernandez
 */
@Stateless
@LocalBean
public class AccesoServicio {

    @EJB
    private AccesoFacade accesoFacade;

    public Boolean obtenerPorNombre(String nombre){
       return this.accesoFacade.findByNombre(nombre)==null;
    }
    
    public Acceso obtenerPorCodigo(Integer codigo){
        return this.accesoFacade.find(codigo);
    }
    
    public List<Acceso> obtenerMenusRaices(){
        return this.accesoFacade.findRoots();
    }
    
    public List<Acceso> obtenerTodos() {
        return this.accesoFacade.findAll();
    }
    
    public List<Acceso> obtenerTodoActivos(){
        return this.accesoFacade.findAllByEstate(Boolean.TRUE);
    }

    public List<Acceso> obtenerSubMenu(Acceso menu){
        return this.accesoFacade.findMenuByRoot(menu);
    }
    
    public List<Acceso> obtenerMenu(Integer codigoRol) {
        return this.accesoFacade.findMenuByCodigoRol(codigoRol);
    }

    public List<Acceso> obtenerSubMenu(Integer codigoRol, Integer codigoMenu) {
        return this.accesoFacade.findSubMenuByCodigoMenuRol(codigoRol, codigoMenu);
    }

    public List<Acceso> obtenerMenuItem(Integer codigoRol, Integer codigoSubMenu) {
        return this.accesoFacade.findMenuItemCodigoSubMenuRol(codigoRol, codigoSubMenu);
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void crear(Acceso acceso) {
        this.accesoFacade.create(acceso);
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void actualizar(Acceso acceso) {
        this.accesoFacade.edit(acceso);
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void eliminar(Acceso acceso) {
        Acceso accesoTmp = this.accesoFacade.find(acceso.getCodAcceso());
        if (accesoTmp != null) {
            this.accesoFacade.remove(accesoTmp);
        }
    }
}
